#include <bits/stdc++.h>
using namespace std;
const int maxn = 500+10;
int f[maxn][maxn], sz[maxn], w[maxn];
vector<int> S[maxn];
int N, M;


void dfs(int u){
    for(auto s:S[u]){
        dfs(s);
        for (int i = M; i >=1 ; --i) {
            int j = !u? 0 : 1;
            for (; j < i; ++j) {
                f[u][i] = max(f[u][i], f[u][j] + f[s][i-j]);
            }
        }
    }
}

int main() {
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    cin >> N >> M;
    for (int i = 1; i <= N; ++i) {
        int ff;
        cin >> ff >> w[i];
        S[ff].push_back(i);
    }

    for(int i=1; i<=N; ++i) {
        for (int j = 1; j <= M; ++j) {
            f[i][j] = w[i];
        }
    }
    dfs(0);
    cout << f[0][M];
    return 0;
}